package com.hnchances.studentscoresystem.controller;

import com.hnchances.studentscoresystem.dto.response.CommonResponse;
import com.hnchances.studentscoresystem.entity.Student;
import com.hnchances.studentscoresystem.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * 学生管理控制器
 * 接口前缀：/student
 * 鉴权规则：所有接口需登录（无额外身份限制）
 * 核心接口：根据身份证查询学生（学生注册校验用）
 */
@Slf4j
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    /**
     * 新增学生
     * @param student 学生信息（name、classID、idcard 必传）
     * @return 新增结果
     */
    @PostMapping("/add")
    public CommonResponse<Boolean> addStudent(@RequestBody Student student) {
        log.info("新增学生，name: {}, classID: {}", student.getName(), student.getClassID());
        boolean result = studentService.insert(student);
        return CommonResponse.success(result, "学生新增成功");
    }

    /**
     * 根据ID查询学生
     * @param studentId 学生ID（请求体JSON格式：{"id":1}）
     * @return 学生信息
     */
    @PostMapping("/getById")
    public CommonResponse<Student> getStudentById(@RequestBody Long studentId) {
        Student student = studentService.selectById(studentId);
        if (student == null) {
            return CommonResponse.fail(400, "学生不存在或已删除");
        }
        return CommonResponse.success(student, "学生查询成功");
    }

    /**
     * 根据身份证查询学生（学生注册校验用）
     * @param params 请求参数（idcard 必传，JSON格式：{"idcard":"430102200207231234"}）
     * @return 学生信息
     */
    @PostMapping("/getByIdcard")
    public CommonResponse<Student> getStudentByIdcard(@RequestBody Map<String, String> params) {
        String idcard = params.get("idcard");
        if (idcard == null || idcard.trim().isEmpty()) {
            return CommonResponse.fail(400, "身份证号不能为空");
        }
        Student student = studentService.selectByIdcard(idcard);
        if (student == null) {
            return CommonResponse.fail(400, "班级中无此学生信息");
        }
        return CommonResponse.success(student, "学生查询成功");
    }

    /**
     * 查询所有正常状态学生
     * @return 学生列表
     */
    @PostMapping("/getAll")
    public CommonResponse<List<Student>> getAllStudents() {
        List<Student> studentList = studentService.selectAll();
        return CommonResponse.success(studentList, "所有学生查询成功");
    }

    /**
     * 修改学生信息
     * @param student 学生信息（id 必传，name、birthday 等可选）
     * @return 修改结果
     */
    @PostMapping("/update")
    public CommonResponse<Boolean> updateStudent(@RequestBody Student student) {
        if (student.getId() == null) {
            return CommonResponse.fail(400, "学生ID不能为空");
        }
        boolean result = studentService.update(student);
        return CommonResponse.success(result, "学生信息修改成功");
    }

    /**
     * 软删除学生（修改status为1）
     * @param studentId 学生ID（请求体JSON格式：{"id":1}）
     * @return 删除结果
     */
    @PostMapping("/del")
    public CommonResponse<Boolean> deleteStudent(@RequestBody Long studentId) {
        boolean result = studentService.deleteById(studentId);
        return CommonResponse.success(result, "学生删除成功");
    }
}